package clases;

import interfaz.dlg_presupuesto_prototipo;
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

public class ClsCellEditorPresupuesto extends AbstractCellEditor implements TableCellEditor {

    //private ClsDatabase bd = new ClsDatabase();
    private ClsDatabase db;
    private String viejo_Value = ""; //Valor antiguo de la celda
    private String nuevo_Value = ""; //valor nuevo de la celda
    private String NameColum = "";//nombre de la columna
    private String ID = "";// Llave del registro
    String tipo = "1";
    int fila = 0;
    JTable table2;
    private JComponent component = new JTextField();
    ClsContraladorEventos controlEvent = new ClsContraladorEventos();
    private ClsMetodos metodos = new ClsMetodos();
    private dlg_presupuesto_prototipo dlg_presupuesto_prototipo;

    public ClsCellEditorPresupuesto(ClsDatabase db, String NameColumn, dlg_presupuesto_prototipo dlg) {
        this.db = db;
        this.NameColum = NameColumn;
        dlg_presupuesto_prototipo = dlg;
    }

    public Object getCellEditorValue() {
        return ((JTextField) component).getText();
    }

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        tipo = table.getValueAt(row, 9).toString();
        table2 = table;
        if (tipo.equals("1")) {
            ((JTextField) component).setEditable(false);
            ((JTextField) component).setText("");
            ((JTextField) component).setBackground(new java.awt.Color(57, 105, 138));
        } else {
            fila = row;
            viejo_Value = value.toString();//Toma valor de celda antes de cualquier modificación
            ID = table.getValueAt(row, 1).toString();//obtiene el ID unico del registro
            ((JTextField) component).setEditable(true);
            ((JTextField) component).setBackground(new java.awt.Color(225, 235, 247));
            ((JTextField) component).setHorizontalAlignment(javax.swing.JTextField.RIGHT);
            ((JTextField) component).setMargin(new java.awt.Insets(0, 2, 0, 2));
            ((JTextField) component).addKeyListener(new java.awt.event.KeyAdapter() {
                public void keyTyped(java.awt.event.KeyEvent evt) {
                    controlEvent.soloNumerosDecimales(evt, ((JTextField) component), 2);
                }
            });
            ((JTextField) component).addFocusListener(new java.awt.event.FocusAdapter() {
                public void focusLost(java.awt.event.FocusEvent evt) {
                    table2.editCellAt(-1, -1);
                    //System.out.println("sergio");

                    //dlg_presupuesto_prototipo.actualizar_partida();
                }
            });
            ((JTextField) component).setText(value.toString());//coloca valor de la celda al JTextField
//            ((JTextField) component).setSelectionStart(0);
//            ((JTextField) component).setSelectionEnd(value.toString().length());
        }
        return component;
    }

    @Override
    public boolean stopCellEditing() {
        nuevo_Value = (String) getCellEditorValue();//Captura nuevo valor de la celda
        //Compara valores, si no son iguales, debe actualizar registro
        if (tipo.equals("0")) {
            if (!nuevo_Value.equals(viejo_Value)) {   //Realiza la actualizacion
//                dlg_presupuesto_prototipo dialog = new dlg_presupuesto_prototipo(new javax.swing.JFrame(), true);
                if (nuevo_Value.equals("") == false) {
                    boolean v = true;
                    try {
                        double numero = Double.valueOf(nuevo_Value);
                    } catch (NumberFormatException nfe) { //si existe un error se coloca 0 a la celda
                        //nuevo_Value = viejo_Value;
                        JOptionPane.showMessageDialog(null, "El numero es incorrecto");
                        v = false;
                    }
                    if (v == true) {
                        DefaultTableModel modeloTabla = (DefaultTableModel) table2.getModel();
                        double cantida = Double.parseDouble(nuevo_Value);
                        double precio = Double.parseDouble(modeloTabla.getValueAt(fila, 5).toString());

                        double total = Double.parseDouble(nuevo_Value) * Double.parseDouble(modeloTabla.getValueAt(fila, 5).toString());
                        //System.out.println(cantida + "-- " + precio + "  -- " + total+"   --- "+metodos.redondeo_1(total));
//                    modeloTabla.setValueAt(metodos.redondeo_1(nuevo_Value), fila, 4);
                        ((JTextField) component).setText(metodos.redondeo_1(nuevo_Value));
                        modeloTabla.setValueAt(metodos.redondeo_1(total), fila, 6);
                        String partida = modeloTabla.getValueAt(fila, 12).toString();
                        //String metrado = tblPresupuesto.getValueAt(fila, 4).toString();
                        // String parcial = modeloTabla.getValueAt(fila, 6).toString().replace(",", "");
                        db.update("presupuesto_partida", " metrado='" + cantida + "', precio_parcial='" + total + "' ", "idproyecto='" + dlg_presupuesto_prototipo.codigo_proyecto + "'  and idpresupuesto='" + dlg_presupuesto_prototipo.idpresupuesto + "' and orden='" + partida + "' ");
                        dlg_presupuesto_prototipo.actualiza_estado_presupuesto(1);
                        modeloTabla.setValueAt(metodos.redondeo_1(nuevo_Value), fila, 4);
                        dlg_presupuesto_prototipo.sumar_totales();
                    } else {
                        ((JTextField) component).setText(viejo_Value);
                    }
                } else {
                    ((JTextField) component).setText(viejo_Value);
                }
            }
        }

        return super.stopCellEditing();
    }
}
